package middleware

import (
	"fmt"
	"log"
	"net/http"
	"strings"
	"yuanfilesys/dao"

	"github.com/gin-gonic/gin"
)

// AuthMiddleware 认证中间件
func AuthMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 从cookie中获取sid
		sid, err := c.Cookie("sid")
		fmt.Println(sid)
		if err != nil {
			c.JSON(http.StatusUnauthorized, gin.H{"error": "未登录"})
			c.Abort()
			return
		}
		// 验证sid
		var user dao.User
		if err := dao.DB.Where("sid = ?", sid).First(&user).Error; err != nil {
			c.JSON(http.StatusUnauthorized, gin.H{"error": "无效的会话"})
			//c.Abort() 是用于终止当前请求处理链路的方法
			c.Abort()
			return
		}
		// 检查是否为管理接口 如果要访问这个路径 就得要管理员接口
		if strings.HasPrefix(c.Request.URL.Path, "/api/user") && !user.IsAdmin {
			c.JSON(http.StatusForbidden, gin.H{"error": "需要管理员权限"})
			c.Abort()
			return
		}
		// 将用户信息存入上下文
		c.Set("user", user)

		log.Printf("中间件当前登录用户：%s，是否管理员：%v", user.Username, user.IsAdmin)
		//将请求控制权传递给后续中间件或处理函数的方法
		c.Next()
	}
}
